[アップデート]Amazon S3のListObjects APIでオブジェクトの復元状況が取得できるようになりました。
初めに
昨日のアップデートでAmazon S3のListObjects API(v2を含む)にGlacier Flexible Retrieval及びGlacier Deep Archiveに格納しているオブジェクトの復元状況が参照できるようになりました。
従来復元状況を確認したい場合はHeadObject APIを個々のファイルに発行し確認する必要があったため、まとめて多数のファイルの復元状況を取得したい場合は、ListObjects
等で対象のファイルを取得の上でHeadObject
を個々のファイルに発行し取得する必要がありました。
単純に一覧で復元状態を確認したいだけでも少し書き込む必要があり手間だったのですが、今後はListObjects
一発で取得できるようになります。
各種SDKはまだ確認していないのですが、AWS CLIは既に対応されていることが確認できたのでこちらを使い試してみます。
バージョン
% aws --version aws-cli/2.12.5 Python/3.11.4 Darwin/22.5.0 exe/x86_64 prompt/off
準備
事前Glacier Flexible Retrievalクラスに格納したオブジェクトと、比較用にスタンダードクラスに格納したオブジェクトを用意しておきます。
※ 内容は特に今回関係ないですが過去の記事執筆の際に使ったファイルです
指定するオプションについて
https://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects-v2.html
--optional-object-attributes (list)
Specifies the optional fields that you want returned in the response. Fields that you do not specify are not returned.
(string)
Syntax:
"string" "string" ...
Where valid values are:
RestoreStatus
今回追加された設定値はREST APIではx-amz-optional-object-attributes
ヘッダ、AWS CLIの場合は--optional-object-attributes
オプションが該当します。
こちらに特定の値を指定することで指定した値に応じて追加の属性を取得することが可能です。
指定可能な値については現時点では今回追加されたRestoreStatus
のみとなりますが、将来的に追加の情報取得が追加される場合はこちらに指定可能なパラメータが増えていくのかもしれません。
RestoreStatus
を指定することで追加で取得可能な属性は以下のとおりです。
RestoreStatus
IsRestoreInProgress (bool)
- 復元中(true)か復元が完了(false)しているか
- 復元を行っていない場合
RestoreStatus
の属性自体がなくなるようです
RestoreExpiryDate
- 取り出しの有効期限
https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html
x-amz-restore: ongoing-request="false", expiry-date="Fri, 21 Dec 2012 00:00:00 GMT"
キー名やフォーマットは異なりますがhead-object
実行時と同等の意味合いを持つ情報が取得できるようです。
実行
特にオプションを指定しない場合
こちらが通常通りの取得となります。
% aws s3api list-objects-v2 --bucket xxxxxxx { "Contents": [ { "Key": "2023-05-14-16-26-02-1D384C99934A41C4", "LastModified": "2023-05-14T16:26:03+00:00", "ETag": "\"7ca1af06731da10aceebfe4e490a055b\"", "Size": 4171, "StorageClass": "STANDARD" }, { "Key": "bimi-logo.svg", "LastModified": "2023-06-30T08:56:34+00:00", "ETag": "\"374b9fe645f998dace2413a231443284\"", "Size": 4722, "StorageClass": "GLACIER" } ], "RequestCharged": null }
復元を行っていない状態ででオプションをつけた場合
--optional-object-attributes
オプションをつけた場合でも復元中もしくは取り出し可能ではない場合は、追加の属性は取得できないようです。
% aws s3api list-objects-v2 --bucket xxxxxxx --optional-object-attributes="RestoreStatus" { "Contents": [ { "Key": "2023-05-14-16-26-02-1D384C99934A41C4", "LastModified": "2023-05-14T16:26:03+00:00", "ETag": "\"7ca1af06731da10aceebfe4e490a055b\"", "Size": 4171, "StorageClass": "STANDARD" }, { "Key": "bimi-logo.svg", "LastModified": "2023-06-30T08:56:34+00:00", "ETag": "\"374b9fe645f998dace2413a231443284\"", "Size": 4722, "StorageClass": "GLACIER" } ], "RequestCharged": null }
復元中かつオプションをつけた場合
IsRestoreInProgress: true
となっており復元中であることが確認できます。
なお完了するとRestoreExpiryDate
属性が付与されるようで、復元中の場合はRestoreExpiryDate
属性自体が存在しないようです。
% aws s3api list-objects-v2 --bucket xxxxxxx --optional-object-attributes="RestoreStatus" { "Contents": [ { "Key": "2023-05-14-16-26-02-1D384C99934A41C4", "LastModified": "2023-05-14T16:26:03+00:00", "ETag": "\"7ca1af06731da10aceebfe4e490a055b\"", "Size": 4171, "StorageClass": "STANDARD" }, { "Key": "bimi-logo.svg", "LastModified": "2023-06-30T08:56:34+00:00", "ETag": "\"374b9fe645f998dace2413a231443284\"", "Size": 4722, "StorageClass": "GLACIER", "RestoreStatus": { "IsRestoreInProgress": true } } ], "RequestCharged": null }
復元が完了している状態でオプションをつけた場合
IsRestoreInProgress
がfalse
となっており、合わせてIsRestoreInProgress
で取得可能な有効期限を確認することができます。
% aws s3api list-objects-v2 --bucket xxxxxxx --optional-object-attributes="RestoreStatus" { "Contents": [ { "Key": "2023-05-14-16-26-02-1D384C99934A41C4", "LastModified": "2023-05-14T16:26:03+00:00", "ETag": "\"7ca1af06731da10aceebfe4e490a055b\"", "Size": 4171, "StorageClass": "STANDARD" }, { "Key": "bimi-logo.svg", "LastModified": "2023-06-30T08:56:34+00:00", "ETag": "\"374b9fe645f998dace2413a231443284\"", "Size": 4722, "StorageClass": "GLACIER", "RestoreStatus": { "IsRestoreInProgress": false, "RestoreExpiryDate": "2023-07-02T00:00:00+00:00" } } ], "RequestCharged": null }
終わりに
これまでちょっと手の込んだことをしないといけない処理がサクッと1コマンドでできるようになる嬉しいアップデートとなりました。
必要以上に属性が取れてしまうと邪魔なこともあるので、オプションで取得する形式となっているのもいいですね。
執筆時点ではまだマネジメントコンソールのバケットの中の表示設定でプロパティに復元状況のような物は見当たりませんが、APIに来ている以上そのうちマネジメントコンソール上からも確認できるようになる可能性もあるかなと期待しています。